package com.ecut.drug_bid.controller;

import com.ecut.drug_bid.domain.Bid;
import com.ecut.drug_bid.domain.Message;
import com.ecut.drug_bid.domain.Tender;
import com.ecut.drug_bid.domain.User;
import com.ecut.drug_bid.service.BidService;
import com.ecut.drug_bid.service.MessageService;
import com.ecut.drug_bid.service.TenderService;
import com.ecut.drug_bid.service.UserService;
import com.ecut.drug_bid.util.UserContext;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 管理员控制器
 * 实现系统管理员的功能模块：
 * 1. 对招投标单位信息进行管理和维护
 * 2. 留言版管理
 */
@RestController
@RequestMapping("/api/admin")
@RequiredArgsConstructor
public class AdminController {

    private final UserService userService;
    private final TenderService tenderService;
    private final BidService bidService;
    private final MessageService messageService;

    /**
     * 检查管理员权限
     */
    private void checkAdminPermission() {
        String userType = UserContext.getCurrentUserType();
        if (!"ADMIN".equals(userType)) {
            throw new RuntimeException("需要管理员权限");
        }
    }

    // ==================== 用户管理 ====================

    /**
     * 获取所有用户列表（管理员）
     */
    @GetMapping("/users")
    public ResponseEntity<List<User>> getAllUsers() {
        checkAdminPermission();
        return ResponseEntity.ok(userService.getAllUsers());
    }

    /**
     * 更新用户状态（启用/禁用）
     */
    @PutMapping("/users/{id}/status")
    public ResponseEntity<Map<String, String>> updateUserStatus(
            @PathVariable Long id,
            @RequestBody Map<String, Integer> request
    ) {
        checkAdminPermission();
        Integer status = request.get("status");
        if (status == null || (status != 0 && status != 1)) {
            throw new RuntimeException("状态值无效，应为0或1");
        }
        userService.updateUserStatus(id, status);
        Map<String, String> response = new HashMap<>();
        response.put("message", "用户状态已更新");
        return ResponseEntity.ok(response);
    }

    /**
     * 删除用户（管理员）
     */
    @DeleteMapping("/users/{id}")
    public ResponseEntity<Map<String, String>> deleteUser(@PathVariable Long id) {
        checkAdminPermission();
        userService.deleteUser(id);
        Map<String, String> response = new HashMap<>();
        response.put("message", "用户已删除");
        return ResponseEntity.ok(response);
    }

    // ==================== 招标管理 ====================

    /**
     * 获取所有招标信息（管理员）
     */
    @GetMapping("/tenders")
    public ResponseEntity<List<Tender>> getAllTenders() {
        checkAdminPermission();
        return ResponseEntity.ok(tenderService.findAll());
    }

    // 删除招标功能已在 TenderController 中实现，这里不需要重复

    // ==================== 投标管理 ====================

    /**
     * 获取所有投标信息（管理员）
     */
    @GetMapping("/bids")
    public ResponseEntity<List<Bid>> getAllBids(
            @RequestParam(required = false) String tenderCode
    ) {
        checkAdminPermission();
        if (tenderCode != null && !tenderCode.isEmpty()) {
            return ResponseEntity.ok(bidService.findByTenderCode(tenderCode));
        }
        return ResponseEntity.ok(bidService.findAll());
    }

    /**
     * 删除投标（管理员）
     */
    @DeleteMapping("/bids/{id}")
    public ResponseEntity<Map<String, String>> deleteBid(@PathVariable Long id) {
        checkAdminPermission();
        bidService.delete(id);
        Map<String, String> response = new HashMap<>();
        response.put("message", "投标信息已删除");
        return ResponseEntity.ok(response);
    }

    // ==================== 留言管理 ====================

    /**
     * 获取所有留言（管理员，包括已隐藏的）
     */
    @GetMapping("/messages")
    public ResponseEntity<List<Message>> getAllMessages(
            @RequestParam(required = false) String status
    ) {
        checkAdminPermission();
        if (status != null && !status.isEmpty()) {
            return ResponseEntity.ok(messageService.findByStatus(status));
        }
        return ResponseEntity.ok(messageService.findAll());
    }

    /**
     * 隐藏留言（管理员）
     */
    @PutMapping("/messages/{id}/hide")
    public ResponseEntity<Map<String, String>> hideMessage(@PathVariable Long id) {
        checkAdminPermission();
        messageService.hide(id);
        Map<String, String> response = new HashMap<>();
        response.put("message", "留言已隐藏");
        return ResponseEntity.ok(response);
    }

    /**
     * 显示留言（管理员）
     */
    @PutMapping("/messages/{id}/show")
    public ResponseEntity<Map<String, String>> showMessage(@PathVariable Long id) {
        checkAdminPermission();
        messageService.show(id);
        Map<String, String> response = new HashMap<>();
        response.put("message", "留言已显示");
        return ResponseEntity.ok(response);
    }

    /**
     * 删除留言（管理员）
     */
    @DeleteMapping("/messages/{id}")
    public ResponseEntity<Map<String, String>> deleteMessage(@PathVariable Long id) {
        checkAdminPermission();
        messageService.delete(id);
        Map<String, String> response = new HashMap<>();
        response.put("message", "留言已删除");
        return ResponseEntity.ok(response);
    }
}

